package com.Jano.service.impl;/**
 * @ClassName : AbstractBaseServiceImpl
 * @Description : 业务层抽象父类,封装异常
 * @Author : Jano
 * @Date: 2022-07-15 16:56
 */

/**
 * 业务层抽象父类,封装异常
 * @author zoumaoji
 * @date 2022/07/15 16:56
 **/

import com.Jano.exception.BusinessException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.util.CollectionUtils;

import java.util.Collection;
import java.util.Objects;

/**
 * description: AbstractBaseServiceImpl <br>
 * date: 2022/6/25 8:12 PM <br>
 * author: zoumaoji <br>
 * version: 1.0 <br>
 */
public abstract class AbstractBaseServiceImpl {
    /**
     * 封装了手动throw异常的操作
     * @param errMsg 异常信息
     */
    private void buildErr(String errMsg) {
        throw new BusinessException(HttpStatus.NOT_ACCEPTABLE,errMsg);
    }

    /**
     * 如果条件为true就抛出异常
     * @param condition 条件表达式或值
     * @param errMsg 错误信息
     */
    protected void throwIfTrue(boolean condition, String errMsg) {
        if (condition) {
            buildErr(errMsg);
        }
    }

    /**
     * 如果条件为false就抛出异常
     * @param condition 条件表达式或值
     * @param errMsg 错误信息
     */
    protected void throwIfFalse(boolean condition, String errMsg) {
        if (!condition) {
            buildErr(errMsg);
        }
    }

    /**
     * 当字符串为空时抛出异常
     * @param str 字符串
     * @param errMsg 错误信息
     */
    protected void throwIfBlank(String str, String errMsg) {
        throwIfTrue(StringUtils.isBlank(str), errMsg);
    }

    /**
     * 当字符串不符合指定正则时抛出异常
     * @param str 字符串
     * @param regex 正则表达式
     * @param errMsg 错误信息
     */
    protected void throwIfNotMatch(String str, String regex, String errMsg) {
        throwIfTrue(!str.matches(regex), errMsg);
    }

    /**
     * 当集合为空的时候抛出异常
     * @param collection 集合
     * @param errMsg 错误信息
     */
    protected void throwIfEmpty(Collection<?> collection, String errMsg) {
        throwIfTrue(CollectionUtils.isEmpty(collection), errMsg);
    }

    /**
     * 当对象不为空的时候抛出异常
     * @param obj   对象
     * @param errMsg 错误信息
     */
    protected void throwIfNotNull(Object obj, String errMsg) {
        throwIfTrue(Objects.nonNull(obj), errMsg);
    }
    /**
     * 当对象为空的时候抛出异常
     * @param obj   对象
     * @param errMsg 错误信息
     */
    protected void throwIfNull(Object obj, String errMsg) {
        throwIfTrue(Objects.isNull(obj), errMsg);
    }
    /**
     * 当两个字符串不相等的时候抛出异常
     * @param str1 字符串1
     * @param str2 字符串2
     * @param errMsg 错误信息
     */
    protected void throwIfStringsNotEquals(String str1, String str2, String errMsg) {
        throwIfTrue(!StringUtils.equals(str1, str2), errMsg);
    }

    /**
     * 当两个字符串不相等的时候抛出异常(忽略大小写)
     * @param str1 字符串1
     * @param str2 字符串2
     * @param errMsg 错误信息
     */
    protected void throwIfStringsNotEqualsIgnoreCase(String str1, String str2, String errMsg) {
        throwIfTrue(!StringUtils.equalsIgnoreCase(str1, str2), errMsg);
    }
}